The computer industry is trending toward more and more virtualization at the hardware level. In these environments, operating systems are run on top of a virtual machine monitor or hypervisor, where interaction with the computer hardware is mediated by the virtualization layer. This allows multiple virtualized operating systems, otherwise known as guest operating systems, or guest OSs, to run on a single computer, making it possible to run multiple workloads on the same machine with strong isolation between them. This is particularly beneficial for IT departments or any operation that requires running multiple workloads or multiple server applications. However, the virtualization layer introduces a large performance penalty whenever the isolated operating systems interact with the computer hardware such that the virtualization layer must interfere to maintain isolation. To address this performance penalty, traditional methods have reduced the number of interactions in which the virtualization layer must interfere by allowing the guest operating system direct control over hardware devices. However, granting the guest operating system direct control of these hardware devices has always required that the guest operating system be granted unfettered and exclusive control of all system memory allocated to that guest operating system. By granting exclusive memory access to the guest operating system, many of the benefits of virtualization, including state encapsulation, migration, snap-shots, and check-points, are lost.